Within communication systems, it is known to use channel coding to provide encryption and/or error correction for data being transmitted. For example, FIG. 1 illustrates an example of channel coding defined by IEEE 802.16 (a wireless broadband standard authored by the Institute of Electrical and Electronics Engineers). In FIG. 1, two data bit streams (A & B) 110, 120 comprising ‘code blocks’ of a predefined size are provided to a turbo encoder 130, which performs encoding on the data bit streams 110, 120. The turbo encoder 130 outputs six data bit streams: the two original data bit streams (A & B) 110, 120 and four generated data bit streams (Y1, Y2, W1, W2) 140, 150, 160, 170. Each of the data bit streams output by the turbo encoder 130 is then individually interleaved to generate six respective interleaved sub-blocks of data 115, 125, 145, 155, 165, 175.
Rate matching is then performed on the six interleaved sub-blocks, which comprises bit collection 180 and bit selection 190. Bit collection 180 comprises arranging the interleaved sub-blocks into one long encoded data stream, commonly referred to as a ‘virtual buffer’. In particular for the example illustrated in FIG. 1, the interleaved sub-blocks are arranged as follows: the data bits from the interleaved sub-block 115 of the first original data bit stream 110; the data bits from the interleaved sub-block 125 of the second original data bit stream 120; alternating data bits from the interleaved sub-blocks 145, 155 of the first two encoded data bit streams 140, 150; and alternating data bits from the interleaved sub-blocks 165, 175 of the last two encoded data bit streams 160, 170. Bit selection 190 is then performed on the data stream within the virtual buffer for transmission. Bit selection typically comprises reading a predefined number of data bits from the virtual buffer, starting at a predefined bit. Such bit selection may implement puncturing, repetition, etc. of the data bits.
Referring now to FIG. 2, there is illustrated a known technique 200 for implementing the channel coding illustrated in FIG. 1. The technique 200 starts by loading the two data bit streams, for example (A & B) 110, 120 of FIG. 1 to be encoded into an input buffer 210. Turbo encoding is then performed on the two data bit streams (A & B) 110, 120 by turbo encoder 220. More specifically, the turbo encoding process comprises two sequences of encoding. The first encoding sequence comprises reading the two data bit streams (A & B) 110, 120 from the input buffer 210 in natural order, and feeding the read data bits into a first constituent encoder, which produces two sets of parity bits ‘Y1’ and ‘W1’. The second encoding sequence comprises interleaving the data bit streams (A & B) 110, 120 by a Convolutional Turbo Code (CTC) interleaver, and feeding the interleaved data bits to a second constituent encoder which produces two further sets of parity bits ‘Y2’ and ‘W2’. The data bit streams (A & B) 110, 120 are required to be stored in the input buffer 210 prior to the turbo encoding in order to allow for them to be interleaved for this second encoding sequence. The two encoding sequences may be performed simultaneously, such that the turbo encoder 220 simultaneously reads from the input buffer two natural order systematic bits (for the first encoding sequence) and two interleaved order systematic bits (for the second encoding sequence). The data bit six streams output by the turbo encoder 220 are then loaded into a middle buffer 230. Once the data bit streams have been loaded into the middle buffer 230, the sub-block interleaving may be performed on each data bit stream within the middle buffer, at 240, followed by rate matching 250. The selected bits following rate matching are then loaded into an output buffer 260.
A problem with this prior art technique for performing channel coding is that known techniques for interleaving the data streams require the entire data stream sub-block to be loaded into the middle buffer 230 in order for the interleaving to be performed. Consequently, because the bit selection process 190 may start at any bit within the virtual buffer 180, the rate matching cannot start until the turbo encoding 220 and sub-block interleaving have finished, resulting in an undesirable latency in the channel coding, and necessitating the use of the middle buffer 230.